/**
 * qrcode.js
 * 二维码
 * @author HLonlin <1021944439@qq.com>
 */

// 默认设置
let defaultSettings = {
  qrcode_id: 'qrcode',
  qrcode_content: 'Example', // 二维码内容 必传
  qrcode_size: 200, // 二维码尺寸 包含qrcode_margin min：10x10 max:1000x1000（如果qrcode_format=png|gif|jpeg|jpg） 1000000x1000000（如果qrcode_format=svg|eps）
  qrcode_ecc: 'L', // 容差率（L:低，大约 7% 的损坏数据可以被纠正） （M:中，大约 15% 的损坏数据可以被纠正） （Q:清晰，大约 25% 的损坏数据可以被纠正）  （H:高，大约 30% 的损坏数据可以被纠正）数据可能会更正）
  qrcode_color: '0-0-0', // 颜色 十进制（[0-255]-[0-255]-[0-255]）或短格式的十六进制值（[a-fA-F]三个字符，例如fff表示白色）或长格式（[a -fA-F]六个字符，例如ff0000表示红色）
  qrcode_bgColor: '255-255-255', // 背景色 十进制（[0-255]-[0-255]-[0-255]）或短格式的十六进制值（[a-fA-F]三个字符，例如fff表示白色）或长格式（[a -fA-F]六个字符，例如ff0000表示红色）
  qrcode_margin: '1', // 边距
  qrcode_format: 'png' // 格式png、gif、jpeg、jpg、svg、eps
}

// 绘制准备
function beforeDraw (setting = {}) {
  // 替换默认值
  const targetSetting = Object.assign(defaultSettings, setting)
  // 二维码容器处理
  const id = targetSetting.qrcode_id
  let qrcode_container = document.getElementById(id)
  if (qrcode_container !== null) {
    // 重置二维码容器
    qrcode_container.innerHTML = ''
  } else {
    // 创建二维码容器
    qrcode_container = document.createElement('div')
    qrcode_container.id = id
    document.body.appendChild(qrcode_container)
  }
  // 创建二维码
  const img = document.createElement('img')
  img.src = `https://api.qrserver.com/v1/create-qr-code/?size=${targetSetting.qrcode_size}x${targetSetting.qrcode_size}&ecc=${targetSetting.qrcode_ecc}&color=${targetSetting.qrcode_color}&bgcolor=${targetSetting.qrcode_bgColor}&margin=${targetSetting.qrcode_margin}&format=${targetSetting.qrcode_format}&data=${targetSetting.qrcode_content}`
  return { targetSetting, qrcode_container, img, id }
}

// 以画布形式绘制二维码
export const drawCodeCanvas = setting => {
  const { targetSetting, qrcode_container, img, id } = beforeDraw(setting)
  const qrcode_canvas = document.createElement('canvas')
  qrcode_canvas.width = targetSetting.qrcode_size
  qrcode_canvas.height = targetSetting.qrcode_size
  const qrcode_context = qrcode_canvas.getContext('2d')
  img.style.display = 'none'
  document.body.appendChild(img)
  img.onload = function () {
    beforeDraw(setting)
    qrcode_context.drawImage(img, 0, 0, img.width, img.height)
    qrcode_container.appendChild(qrcode_canvas)
    document.body.removeChild(img)
  }
  return id
}

// 以图片形式绘制二维码
export const drawCodeImages = setting => {
  const { qrcode_container, img, id } = beforeDraw(setting)
  qrcode_container.appendChild(img)
  return id
}